package com.dynamic.mybatis.core.intercept;

import com.dynamic.mybatis.core.metadata.DynamicMappedStatement;

/**
 * 1. 实现该接口并注入到spring容器中。应用启动后会加载spring容器中所有的该接口的实现类的实例，不保证多个Handler执行的先后顺序，按默认注入到spring先后顺序执行
 * 2. 使用DynamicSqlSessionTemplate实例执行addSqlSessionHandler方法来添加Handler。如果该Handler和方式1中方式注入的Handler为同一个实例，则后添加的会覆盖前面的。
 *
 * @param <A> 入参
 * @param <B> 处理后的入参
 * @param <C> 出参
 * @param <D> 处理后的出参数
 */
public interface DynamicSqlSessionHandler<A, B, C, D> {

    B before(DynamicMappedStatement dms, A parameter);

    D after(DynamicMappedStatement dms, B parameter, C result);
}
